/**
 *@Title: BufferTest.java
 *@Description: TODO
 *@author:Lau
 *@date 2017年7月9日 上午11:01:54 
 *@version V1.0
 */
package com.lty.nio.buffertest;

import java.nio.IntBuffer;

/** 
* @ClassName: BufferTest 
* @Description: TODO
* @author Lau 
* @date 2017年7月9日 上午11:01:54 
*  
*/
public class BufferTest2 {

	/** 
	* @Title: main 
	* @Description: TODO
	* @param args
	* @return void
	* @throws 
	*/
	public static void main(String[] args) {
		//创建指定长度的缓冲区
		IntBuffer buff = IntBuffer.allocate(10);
		System.out.println("缓冲区初始容量：" + buff.capacity());
		
		int[] array = new int[]{3,5,1};
		
		//使用数组来创建一个缓冲区视图
		buff = buff.wrap(array);
		
		//打印对象信息
		System.out.println("原始缓冲区类信息：" + buff);
		
		System.out.println("缓冲区容量：" + buff.capacity());
		
		//利用数组的某一个区间来创建视图
		//buff = buff.wrap(array,0,2);
		
		//改变数组第二个元素值
		array[1] = 90;
		
		//遍历缓冲区中数据
		System.out.println("缓冲区中数据如下：");
		
		for(int i=0; i< buff.limit(); i++){
			System.out.print(buff.get() + "\t");
		}
		
		//遍历数组中元素，结果表明缓冲区中的修改，也会直接影响到原数组中的数据
		System.out.println("\n原始数据如下：");
		for(int a : array){
			System.out.print(a + "\t");
		}
		
		//buff.flip();//对缓冲区进行反转(limit = pos,pos = 0)
		//buff.clear();
		
		//打印对象信息
		System.out.println("\n原始缓冲区：" + buff);
		
		//复制一个新的缓冲区
		IntBuffer buff2 = buff.duplicate();
		System.out.println("复制缓冲区：" + buff2);
		
		////0 <= mark <= position <= limit <= capacity
		
		//遍历缓冲区中数据
		System.out.println("复制缓冲区中数据如下：");
		buff2.flip();
		for(int i=0; i< buff2.limit(); i++){
			System.out.print(buff2.get() + "\t");
		}
		
		buff2.put(2,100);
		//遍历缓冲区中数据
		System.out.println("\n修改复制缓冲区后数据如下：");
		buff2.flip();
		//buff2.clear();
		for(int i=0; i< buff2.limit(); i++){
			System.out.print(buff2.get() + "\t");
		}
		
		//遍历缓冲区中数据
		System.out.println("\n原始缓冲区中数据如下：");
		buff.flip();
		//buff.clear();
		for(int i=0; i< buff.limit(); i++){
			System.out.print(buff.get() + "\t");
		}
		
		System.out.println("\n原始缓冲区：" + buff);
		System.out.println("复制缓冲区：" + buff2);
	}

}